
最短で前に進むコツは「使う順番」で覚えること。
本記事は、未経験でも週10時間×1〜2週で「Pythonの基礎文法+実務で使う書き方」を一気に身につけるための動くサンプル中心の保存版です。
読む→コピペ→動かす→少し変える、のループで“わかる”より“できる”へ。
終わる頃には、pandasやscikit-learnに進める最低限の土台が整います。
よくあるつまずき(でも、ここを越えれば一気に伸びる)
参考書を1周しても手が止まる、ググるたびに書き方が違う、現場でよく見る“地味だけど重要”な小技(f文字列、例外処理、辞書操作など)が抜け落ちる…。
解決策は、使う順番に沿って“できる”を積み上げること。本記事では実務で最頻出の文法だけを濃縮して並べます。
-
-
【保存版】独学かスクールか?費用対効果をデータで比較
結論:正解は“人によって違う”。だからこそ数字で意思決定しましょう。 本記事では ①時間短縮(Time to Skill)②成功確率(転職・副業)③キャッシュフロー(回収月数/NPV) の3軸で、独学 ...
現場10年の結論:毎日使う書き方だけ厳選
筆者(ふみと)は大手企業でデータサイエンティスト歴10年、案件100件以上。
現場で重要なのは読みやすさ×再現性です。
ここでは、日常的に叩く文法・書き方だけに絞って紹介します。
余計な背伸びは無し。今日から使うための記事です。
ポイント
新人時代、変数名とファイルI/Oが曖昧でレビューが毎回やり直しに…。
この記事の順で学び直すと、レビュー通過率が上がりました。
最短で身につく基本文法(コピペでOK)
以降のサンプルは Python 3.10+ を想定。
Jupyter/VSCode いずれでもOKです。
1. 変数・型・演算子
# 代入は「名前 = 値」
name = "Taro"
age = 29
pi = 3.14159
is_active = True # True/False は大文字
# 型を確認
print(type(name), type(age), type(pi), type(is_active))
# 数値演算
x = 10
print(x + 3, x - 3, x * 3, x / 3, x // 3, x % 3, x ** 2)
# 文字列の結合と繰り返し
print("Hello" + " " + name)
print("-" * 10)何をしている?
=は代入、type()は中身の型確認。//は切り捨て除算、%は剰余、**はべき乗。- 文字列の
+は結合、"-" * 10は同じ文字の繰り返し。
メモ
None は「何もない」を表す特別な値。条件分岐で False と同様に扱われやすいので注意。
2. コレクション(list/tuple/dict/set)とスライス
# list:可変の順序付きコレクション
nums = [10, 20, 30]
nums.append(40)
nums[0] = 11
print(nums, nums[:2], nums[-1]) # スライス/末尾
# tuple:不変(読み取り専用)の並び
point = (3, 5)
# dict:キーと値のペア(最頻出)
user = {"name": "Taro", "age": 29}
user["job"] = "analyst"
print(user.get("age"), user.keys(), user.values())
# set:重複なし集合(会員IDの一意化など)
ids = {101, 102, 102, 103}
print(ids) # {101, 102, 103}
# よく使うイディオム(内包表記)
squares = [i*i for i in range(5)] # [0, 1, 4, 9, 16]
evens = [i for i in range(10) if i % 2 == 0]
name_lengths = {n: len(n) for n in ["sato", "suzuki"]}何をしている?
listは中身をあとから変えられる、tupleは固定。dictは検索が速く、設定値やレコード表現に便利。setは重複除去に最適。- 内包表記は「作る→条件→変換」を1行で書く定番パターン。
3. 文字列操作(実務頻出)
s = " Python,Data,Science "
print(s.strip()) # 前後空白除去
print(s.lower()) # 小文字化
print("python" in s.lower()) # 含有判定
print("|".join(["A", "B", "C"])) # 結合
print("Taro:{age}".format(age=29)) # format
# f文字列(最推奨):読みやすく速い
name, age = "Taro", 29
print(f"{name} is {age} years old")何をしている?
- 前処理でよくある大小文字の統一、前後空白の削除。
inで部分一致の判定。f"...{変数}"は読みやすく・速い文字列整形。
4. 条件分岐・ループ
# if / elif / else
score = 72
if score >= 80:
grade = "A"
elif score >= 65:
grade = "B"
else:
grade = "C"
print(grade)
# for ループ
for n in ["sato", "suzuki", "tanaka"]:
print(n)
# enumerate:インデックスも欲しい
for i, n in enumerate(["sato", "suzuki"]):
print(i, n)
# range:0..N-1
for i in range(3):
print(i)
# while:条件が続く限り
c = 3
while c > 0:
c -= 1何をしている?
- 条件分岐で上から順に判定。
enumerateは行番号+要素を同時に取りたいときの定番。range(N)は0〜N-1の連番。
5. 関数・スコープ・型ヒント
def add(a: int, b: int) -> int:
"""2つの整数を足して返す(型ヒント付き)"""
return a + b
print(add(2, 3))
# デフォルト引数と可変長
from typing import Iterable, Any
def flatten(items: Iterable[Iterable[Any]]) -> list[Any]:
out: list[Any] = []
for it in items:
out.extend(it)
return out
print(flatten([[1,2],[3,4]]))何をしている?
-> intの型ヒントは実行時に強制されないが、補完・保守に効く。- Docstring(
"""説明""")で意図を残すとレビューが楽。
6. 例外処理(try/except/else/finally)
try:
val = int("42") # ここで例外が出るかも
except ValueError as e:
print("数値に変換できません", e)
else:
print("成功", val)
finally:
print("後片付け")何をしている?
- 失敗しそうな処理を
tryに入れ、失敗時はexceptで丁寧に対応。 - 成功時だけ走る処理は
else、最後に必ず走る後片付けはfinally。 - 握り潰さない:ログを残し、必要なら
raiseで早めに失敗させる。
7. with文(コンテキスト管理)とファイルI/O
from pathlib import Path
p = Path("sample.txt")
# 書き込み
with p.open("w", encoding="utf-8") as f:
f.write("hello\n")
# 読み込み
with p.open("r", encoding="utf-8") as f:
content = f.read()
print(content)何をしている?
withは自動でクローズまで面倒を見てくれる安全な書き方。Pathを使うとOS差異を気にせずパス操作が読みやすくなる。
8. モジュール・パッケージの基本
# 標準ライブラリ
from datetime import datetime, timedelta
print(datetime.now() + timedelta(days=7))
# 自作モジュール(同ディレクトリの util.py から)
# util.py に def greet(name): return f"Hello {name}" と定義しておく
from util import greet
print(greet("Taro"))何をしている?
- よく使う機能は標準ライブラリだけで済むことが多い。
- ファイルを分けて再利用できる形にしておく(モジュール化)。
9. よくある落とし穴と回避策
| 落とし穴 | 例 | 回避策 |
|---|---|---|
| 可変のデフォルト引数 | def f(x, cache=[]) | None を使い、中で初期化:if cache is None: cache = [] |
| 同一参照のコピー | a = b = [] | 片方の変更がもう片方に波及。a=[]; b=[] |
| 浮動小数の丸め誤差 | 0.1+0.2 != 0.3 | 金額は decimal、比較は math.isclose |
| 無限ループ | while True: | 抜け条件/カウンタを必ず用意 |
10. 実務での“読みやすい”スタイル(最短版)
- 1関数20〜30行を目安に分割/長い処理は関数化
- 変数名は意味のある英語(
df_sales,churn_rateなど) - f文字列でログ・メッセージを一元化
- コード最上部に設定値をまとめる(パス・しきい値など)
- 最後に
if __name__ == "__main__":ブロックでエントリポイント
from dataclasses import dataclass
@dataclass
class Config:
input_path: str = "data/input.csv"
threshold: float = 0.5
CONFIG = Config()
def main() -> None:
print(f"Read from {CONFIG.input_path}, threshold={CONFIG.threshold}")
if __name__ == "__main__":
main()何をしている?
- 設定は
Configに集約し、上から読める形に。 __main__で「このファイルを直接実行したときだけ」動く入口を作る。
最短で“実務に効く”学び方
週10時間を目安に、以下の順番で1〜2週かけて基礎を固め、すぐに[pandas基礎]と[scikit-learn基礎]へ進みましょう。
- 本記事のサンプルをJupyterで全て動かす
- 例外処理・ファイルI/O・内包表記を使い家計簿CSVの集計を作る
- f文字列+関数+Docstringで“読みやすい雛形”にする
途中で詰まる人は、質問対応とレビューのあるスクールを併用すると挫折率が激減します。
TechAcademy データサイエンスコース

株式会社キカガク AI人材長期育成コース

家計簿CSVの集計ミニ課題(提出推奨)
課題:expenses.csv(列:date,category,amount)を読み、月別×カテゴリ別の合計を出力するスクリプトを作成。
集計結果をsummary.csvに保存。
from pathlib import Path
import csv
from collections import defaultdict
in_path = Path("expenses.csv")
out_path = Path("summary.csv")
def read_rows(path: Path) -> list[dict[str, str]]:
with path.open("r", encoding="utf-8") as f:
return list(csv.DictReader(f))
def summarize(rows: list[dict[str, str]]) -> list[dict[str, str]]:
agg = defaultdict(float)
for r in rows:
ym = r["date"][:7] # YYYY-MM
key = (ym, r["category"])
agg[key] += float(r["amount"])
return [
{"year_month": k[0], "category": k[1], "amount": f"{v:.0f}"}
for k, v in sorted(agg.items())
]
def write_rows(path: Path, rows: list[dict[str, str]]):
with path.open("w", encoding="utf-8", newline="") as f:
w = csv.DictWriter(f, fieldnames=["year_month", "category", "amount"])
w.writeheader()
w.writerows(rows)
if __name__ == "__main__":
try:
rows = read_rows(in_path)
summary = summarize(rows)
write_rows(out_path, summary)
print(f"Saved: {out_path.resolve()}")
except Exception as e:
print(f"Error: {e}")
raise流れの理解ポイント
- 入力→処理→出力を関数で分離(テストしやすい)
- 例外時はメッセージを出しつつ再送出して原因特定を早める
newline=""はCSVの改行ズレ対策(Windowsで特に重要)
拡張課題
amount = 単価×数量のような派生列を追加
- pandasで同じ集計を書く/棒グラフで可視化
付録A:チートシート(コピペ保存)
# Truthy/Falsy(if判定で False になるもの)
# False, None, 0, 0.0, "", [], {}, set(), range(0)
# 三項演算子(式版の if)
score = 72
status = "OK" if score >= 60 else "NG"
# 辞書の安全取得と初期化
user = {}
value = user.get("key", "default")
user.setdefault("visited", 0)
user["visited"] += 1
# 例外の再送出(ログを残してから)
def risky(): ...
try:
risky()
except Exception as e:
print(f"error: {e}")
raise
# 一時リストを作らずジェネレータで
sum_len = sum(len(s) for s in ["a", "bbb", "cc"])付録B:次に学ぶべき順番(6ヶ月ロードマップ対応)
-
-
【保存版】pandas基礎:データフレームの作成・整形・結合・集計を“実務の型”で身につける
対象:未経験〜初学者/pandas 2.x・Python 3.10+ を想定ゴール:読み込み→選択→整形→結合→集計→欠損→日時→ピボット→出力まで、実務でそのまま使える書き方を10ステップで習得 デ ...
-
-
【保存版】可視化入門:Matplotlib/Plotlyの使い分けと“伝わるグラフ設計”10ステップ
結論:可視化は「きれいに描く」ことではなく、意思決定を動かすための設計です。 本稿では、未経験〜初学者が 週10時間×1〜2週 で、Matplotlib/Plotlyを軸に “伝わるグラフ”の設計と実 ...
-
-
はじめてのSQL:SELECT/WHERE/GROUP BYを最短で理解【コピペOK】
データ分析・自動レポート・簡易アプリの土台はSQLです。Pythonだけで押し切るより、前処理の7割をDB側で完結させる方が速く・安定します。本記事は、未経験〜初 学者が週10時間×2〜3週で、SEL ...
-
-
【保存版】scikit-learn基礎:回帰・分類・前処理・パイプライン・交差検証を“実務の型”で習得
機械学習で迷子になる最大の理由は、前処理→学習→評価→改善の順番が曖昧なまま個々のアルゴリズムに飛びつくこと。 本記事は、未経験〜初学者が週10時間×2〜3週で到達できるscikit-learnの最短 ...
-
-
Webスクレイピングの法的リスクと安全運用|“規約→同意→頻度→記録”でトラブルを回避する実務ガイド
「副業や社内でスクレイピングを使いたい。でも、どこまでOKで、何をするとNG?」 結論、“安全運用の型”を最初に決めると迷いません。鍵は規約 → 同意 → 頻度 → 記録。 関連記事:>> ...
FAQ:よくある質問
Q1. 文系ですが大丈夫?
A. まずは実装→直観→式の順で十分。必要な数学は後から埋めればOK。
Q2. エディタは何を使う?
A. VSCodeかJupyterがおすすめ。
>>【保存版】Jupyter Notebookの基本:環境構築・使い方・再現性・“読みやすいノート”設計まで完全ガイド
Q3. つまずいたら?
A. エラー文をコピペ→「最初の1行」を読む→最小再現を作って切り分け。
Q4. コードはどこに置く?
A. GitHubに毎週コミットして、ポートフォリオ化を意識。
>>【保存版】Git/GitHub入門:バージョン管理・ブランチ戦略・レビュー・自動化を“実務の型”で最短習得
最近のコメント